package functional_programming;

import java.util.Comparator;
import java.util.function.*;

class AA {}
class BB {}
class CC {}

public class ClassFunctionals {
    static AA f1(){
        return new AA();
    }
    static int f2(AA aa1,AA aa2){
        return 1;
    }
    static void f3(AA aa) {}
    static void f4(AA aa, BB bb) {}
    static CC f5(AA aa) { return new CC(); }
    static CC f6(AA aa, BB bb) { return new CC(); }
    static boolean f7(AA aa) { return true; }
    static boolean f8(AA aa, BB bb) { return true; }
    static AA f9(AA aa) { return new AA(); }
    static AA f10(AA aa1, AA aa2) { return new AA(); }
    public static void main(String[] args) {

        Supplier<AA> s = ClassFunctionals::f1;
        AA aa = s.get();
        Comparator<AA> cmp = ClassFunctionals::f2;
        cmp.compare(new AA(), new AA());
        Consumer<AA> consumer = ClassFunctionals::f3;
        consumer.accept(new AA());
        BiConsumer<AA, BB> biConsumer = ClassFunctionals::f4;
        biConsumer.accept(new AA(), new BB());
        Function<AA, CC> function = ClassFunctionals::f5;
        CC apply = function.apply(new AA());
        BiFunction<AA, BB, CC> biFunction = ClassFunctionals::f6;
        biFunction.apply(new AA(),new BB());
        Predicate<AA> predicate = ClassFunctionals::f7;
        predicate.test(new AA());
        BiPredicate<AA, BB> biPredicate = ClassFunctionals::f8;
        biConsumer.accept(new AA(), new BB());
        UnaryOperator<AA> aaUnaryOperator = ClassFunctionals::f9;
        aaUnaryOperator.apply(new AA());
        BinaryOperator<AA> binaryOperator = ClassFunctionals::f10;
        binaryOperator.apply(new AA(), new AA());

    }
}
